iT邦幫忙

2024 iThome 鐵人賽

DAY 6
0
Modern Web

關於寫react 那二三事系列 第 6

Day6 關於primereact的Forms (上)

  • 分享至 

  • xImage
  •  

primereact 有提供相當多 Form元件
除了最基本的InputText、InputTextarea、RadioButton外,
還有Dropdown、MultiSelect 以及與Quill配合的Editor,

因為很多,所以從中挑選幾樣我覺得很棒的元件出來說說
感覺可以講很多,不如就分上、中、下三集吧!
今天就先來說說Calendar、Chips這幾樣吧!
因為昨天已經做了側邊導航列,接下來會根據主題建立導航列跟文件名稱

但說到Calendar就不得不說說我跟minDate之間的愛恨情仇,
迄今我還是覺得應該是10.6.3版的bug,
但後面版本有沒有除掉我就不清楚了,
畢竟我真不願意回去看元件Code,我只是一條沒有上進心的鹹魚啊!!!

事情是這樣的,某天案子進來了,
因此先進行看著Figma初步切版,
切著切著看到小日曆有個要求是,
只能選今天之後的日期,覺得沒甚麼添加的minDate就可以了,
然後看到版型添加了yearNavigator跟monthNavigator,
然後再加個local讓它吃config更改一下顯示語言,
想說css也拉好日曆的皮了,一切顯示完美,也快下班整個人心情愉悅,
還有點時間,不如試試功能吧!
先從切換月份開始,先來選下個月好了~(我點)
嗯?怎麼還是這個月,難道是手殘???
應該是我手殘吧?!!
那...那在切一次?(謹慎點擊)
不!!!不可能!!!為什麼還是這個月????!!!!
那...月份壞了?那年份呢?
啊~~~鴨霸哩...壞了
完了,總不能跟上頭說...
「哈哈...因為PrimeReact壞了只能看不能改~你們就看看就好」
這種不負責任又不要臉的話...我說不出口啊
這時只有幾百隻草泥馬在心裡奔騰
用我破爛英文找找有沒有人跟我有一樣問題,
可能英文真的太破,完全找不到...
天啊!!我都要哭了
難道我...又要去啃code了
好吧...認了...啃吧!
又不是沒啃過...怕它?
再不濟就再下一個UI,
東看看西看看,嗯...
看起來...要來點yearRange,
好吧...我從來沒想過這貨能對minDate有啥影響,
還好有認真的找到方案
因為隔天早上就被抓去會議室開專案會議

總之yearNavigator加minDate在PrimeReact 10.6.3版會碰出新滋味
給遇到一樣問題的人參考

故事說完了,元件也介紹了差不多了
先來說說日曆中文化吧,應該是滿需要的
建立一個日曆config
calendar.json

{
    "firstDayOfWeek": 0,
    "dayNames": ["星期日","星期一","星期二","星期三","星期四","星期五","星期六"],
    "dayNamesShort": ["日","一","二","三","四","五","六"],
    "dayNamesMin": ["日","一","二","三","四","五","六"],
    "monthNames": ["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],
    "monthNamesShort": ["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"]
}

再來引入
Forms.tsx

import React, { useState } from 'react';
import { Calendar } from 'primereact/calendar';
import { addLocale } from 'primereact/api';
import { Nullable } from 'primereact/ts-helpers';
import Config from '../config/calendar.json';
const FormsCompnent: React.FC = () => {
    const [dates, setDates] = useState<Nullable<Date[]>>(null);
    addLocale('zh-cn', Config);
    return (
        <div>
            <Calendar
                readOnlyInput //如果不想讓使用者隨意輸入
                selectionMode="range"//選擇模式 一般為single 還有multiple多選不用連續 range連續日期
                locale="zh-cn"
                placeholder="請選日期"
                dateFormat="yy/mm/dd" //日期格式
                value={dates} //multiple跟range都要為Date[]
                onChange={(e: any) => setDates(e.value)} 
                hideOnRangeSelection //選完自動隱藏
                />
        </div>
    );
}
export default FormsCompnent;

Calendar元件介紹得差不多了,再來說說Chips
說到Chips就會想到FloatLabel TS Bug 原本想用酷酷功能,結果GG了
https://github.com/primefaces/primereact/issues/6438
但看起來,10.6.4有進行維修,
當然這功能不只在Chips,只是在弄它時發現的,
說完,其實也差不多把Chips講完了
引用

import { Chips } from 'primereact/chips';

然後設定values

const [value, setValue] = useState<string[]>([]);

再來塞component

<Chips value={value} onChange={(e: any) => setValue(e.value)}/> 

好了說得差不多啦~
明天見!


上一篇
Day5 關於primereact sidebar 跟panelmenu
下一篇
Day7 關於primereact的Forms (中)
系列文
關於寫react 那二三事30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言